Übungen fett, Kurzaufgaben normal.
Ein Klick auf einen roten Hyperlink zeigt die Lösung.
Lernziele
Fragen
Die Aufgabe RangeSkelett.xls enthält u.a. drei benannte Zellbereiche auf einem Excel-Tabellenblatt.
Welchen Wert besitzt die Variable Nummer nach Ausführung der folgenden Programmzeilen?
Was ändern die folgenden Zeilen am Tabellenblattinhalt?
Lernziele
Fragen
Implementieren Sie das Beispiel Zwischenresultate vollständig in VBA unter Excel. Nehmen Sie die beschriebenen Programmteile in Ereignisprozeduren auf, und ergänzen Sie das Programm um den Algorithmus, der das Arbeitsblatt "Zwischenresultate" um eine Position nach links verschiebt.
Lernziele
Fragen
Schreiben Sie den Verschiebe-Algorithmus des Beispiels Zwischenresultate neu mit Hilfe einer For ... Next-Schleife anstelle der For Each ... Next-Schleife.
Lernziele
Notieren Sie die Anweisungen, die folgende Objektvariablen vereinbaren:
Lernziele
Der Zugriff auf Objekte, die in der Objekthierarchie weit unten stehen, kann dank der Standardeigenschaften von Objekten teilweise sehr kurz ausfallen.
Schreiben Sie die folgenden Anweisungen so kurz wie möglich, indem Sie Standardeigenschaften verwenden. Was bewirken die Anweisungen.
Formulieren Sie die folgenden Anweisungen ungekürzt, d.h. ohne Standardeigenschaften zu verwenden. Welche Datentypen besitzen die Variablen werBinIch... ?
Lernziele
Vertiefungsfragen
Ändern Sie das Beispiel LZwischenresultate.xls wie folgt:
Lagern Sie den Programmcode, der das Tabellenblatt Zwischenresultate sucht, in eine Funktion sucheBlatt aus. Der Funktionswert soll True sein, falls das Blatt gefunden werden konnte und sonst False. Verwenden Sie die Funktion in den Ereignisprozeduren Tabellenblatt_Klick, nachRechts_Klick und nachLinks_Klick.
Verallgemeinern Sie die Funktion sucheBlatt so, dass man als Argument einen beliebigen Tabellenblattnamen angeben kann, nach dem gesucht werden soll. Passen Sie die Funktionsaufrufe entsprechend an.
Ändern Sie die Funktion sucheBlatt so ab, dass als Funktionswert ein Verweis auf das gefundene Blatt zurückgegeben wird. Existiert das genannte Tabellenblatt nicht, so soll die Funktion Nothing zurück geben. Passen Sie die Funktionsaufrufe entsprechend an.
Worin liegt der Unterschied zwischen den beiden folgenden Zeilen?
Lernziele
Vertiefungsfragen
Laden Sie die Arbeitsmappe vertauscheSkelett.xls, und schreiben Sie ein Programm, das zwei Tabellenblätter in der Worksheets-Auflistung vertauscht:
Lernziele
Beschreiben Sie den Inhalt der Variablen des folgenden Programms, jeweils nach Ausführung der nummerierten Zeilen. Welche Objekte existieren nach jeder Zeile? Begründen Sie Ihre Antworten einmal grafisch und einmal mit Hilfe von Zählern, welche die Verweise auf die Objekte zählen.
Public Eintrag1 As cEintrag Private Eintrag2 As cEintrag Sub Test() '1 Dim Temp As cEintrag '2 Set Temp = New cEintrag '3 Set Eintrag1 = New cEintrag '4 Set Eintrag2 = Temp '5 Set Temp = Eintrag1 '6 Set Eintrag1 = Nothing '7 End Sub '8
Lernziele
Verständnisfragen
Öffnen Sie die Arbeitsmappe LTelefonverzeichnis.xls aus dem Lösungsverzeichnis, und machen Sie sich mit dem Programm vertraut.
Fügen Sie die Namen 'David', 'Beat', 'Carmen' und 'Anna' in dieser Reihenfolge ins Verzeichnis ein, und beobachten Sie dabei den Programmablauf mit dem Debugger. Lassen Sie noch nicht die Liste ausgeben!
Skizzieren Sie die Beziehungen der Objekte untereinander.
| Hinweise: | Wechseln Sie in den Entwurfsmodus |
Beobachten Sie den Programmablauf bei der Suche nach den Namen 'David' und 'Beat'.
Im wievielten Durchlauf werden die gesuchten Namen jeweils gefunden?
| Fragen: | Welche einfache Massnahme könnte die Suche beschleunigen? Wie 'schnell' könnten Sie den Suchalgorithmus damit machen? Schlagen Sie ein Mass vor, mit dem Sie die Geschwindigkeit eines Suchalgorithmus 'fair' und vergleichbar angeben können. |
Beobachten Sie den Programmablauf beim Auflisten der Namen und Telefonnummern. Verfolgen Sie insbesondere die Ausführung des Sortieralgorithmus.
Die beiden Programmzeilen
tempVerzeichnis.Add Verzeichnis.Item(min) Verzeichnis.Remove min
in der Prozedur sortiere werden je 4 Mal ausgeführt. Wie viele Objekte existieren jeweils nach Ausführung jeder Zeile?
Fügen Sie in das Klassenmodul cEintrag folgende Zeilen ein:
Private Sub Class_Initialize() MsgBox "neues Objekt erstellt" End Sub
Das Klassenmodul cEintrag enthalte zusätzlich noch folgende Zeilen:
Private Sub Class_Terminate() MsgBox "Objekt " & Name & " wird gelöscht" End Sub
Das Modul Prozeduren enthalte folgende Testprozedur:
Private Sub Test() Dim einVerzeichnis As Collection ' 1 Dim einEintrag As cEintrag ' 2 Set einVerzeichnis = New Collection ' 3 Set einEintrag = New cEintrag ' 4 einEintrag.Name = "Jakob" ' 5 einVerzeichnis.Add einEintrag ' 6 Set einEintrag = New cEintrag ' 7 einEintrag.Name = "Daniela" ' 8 einVerzeichnis.Add einEintrag ' 9 Set einEintrag = New cEintrag '10 einEintrag.Name = "Kurt" '11 einVerzeichnis.Add einEintrag '12 Set einEintrag = New cEintrag '13 einEintrag.Name = "Luise" '14 einVerzeichnis.Add einEintrag '15 Set einEintrag = Nothing '16 Set einEintrag = einVerzeichnis.Item(3) '17 einVerzeichnis.Remove 3 '18 Set einEintrag = Nothing '19 Set einEintrag = einVerzeichnis.Item(3) '20 einVerzeichnis.Remove 3 '21 End Sub '22
Welche Meldungen erscheinen jeweils nach Ausführung der nummerierten Zeilen? Die Arbeitsmappe TelefonverzeichnisTest.xls enthält das Klassenmodul und die Testprozedur. Überprüfen Sie Ihre Antworten.
| Hinweise: | Machen Sie sich eine Skizze, welche die beteiligten Objekte, Objektvariablen und Objektverweise grafisch darstellt. |
Lernziele
Sie sollen den Begriff 'eltern' in den oben abgebildeten Baum einfügen. Wie bleibt der Baum sortiert?
Fügen Sie folgende Begriffe der Reihe nach in den abgebildetetn Baum ein, und skizzieren Sie das Ergebnis.
Konstruieren Sie einen alternativen sortierten Binärbaum für die sieben im Bild genannten Begriffe. Beschreiben Sie Ihr Vorgehen rezeptartig. Wie viele verschiedene Bäume kann es bei sieben Begriffen schätzungsweise geben?
Lernziele
Der folgende Entwurfscode beschreibt einen Algorithums für das Einfügen von Elementen in einen sortierten Binärbaum.
FügeHinzu Begriff
FALLS Baum noch keinen Wurzelknoten hat
erzeuge Wurzelknoten
fülle Begriff ein.
SONST
gehe zu Wurzelknoten
WIEDERHOLE BIS Begriff = Begriff im aktuellen Knoten
FALLS Begriff < Begriff im aktuellen Knoten
FALLS Knoten keinen linken Nachfolger hat
erzeuge linken Nachfolgerknoten
fülle Begriff ein
gehe zu linkem Nachfolgerknoten.
SONST
FALLS Knoten keinen rechten Nachfolger hat
erzeuge rechten Nachfolgerknoten
fülle Begriff ein
gehe zu rechtem Nachfolgerknoten.
Was passiert, wenn man versucht, mit dem beschriebenen Einfügealgorithmus einen Begriff einzufügen, der bereits im Baum vorhanden ist?
Lernziele
Jedes Element einer verketteten Liste ist nur über den Verweis von seinem Vorgängern aus erreichbar. Wird versehentlich ein solcher Verweis gelöscht, so sind alle nachfolgenden Elemente verloren. Reist beispielsweise die unten skizzierte Kette zwischen 'beat' und 'clara', so sind die Elemente 'clara', 'david' und 'eva' nie mehr erreichbar.
Formulieren Sie entwurfssprachlich einen Algorithmus, der ...
Verallgemeinern Sie die drei Algorithmen und implementieren Sie sie in Visual Basic. Verwenden Sie die Arbeitsmappe verketteteListeSkelett.xls.
Lernziele
Vertiefungsfragen
Laden Sie die Arbeitsmappe LverketteteListe.xls aus dem Lösungsverzeichnis, und wechseln Sie in die Programmierumgebung.
Machen Sie sich mit dem Programmcode vertraut.
Wechseln Sie ins Modul Prozeduren, setzen Sie den Cursor auf die
Variable Anfang, und klicken Sie auf die Schaltfläche
in der Debugger-Symbolleiste (oder drücken Sie <Umschalt> + <F9>).
Bestätigen Sie den Dialog, der erscheint, mit der Schaltfläche 'Hinzufügen'. Sie können nun im
Fenster Überwachungsausdrücke den Inhalt der Variablen Anfang bei der Programmausführung jederzeit
ansehen.
Lernziele
Das folgende Bild zeigt zwei sortierte Beispielbäume.
In welcher Reihenfolge werden die Knoten in den folgenden vier Traversierungsverfahren zurückgegeben?
Formulieren Sie umgangssprachlich eine Vorschrift, die das erste Element nach der Inordnungs-Traversierung zurückgibt. Beginnen Sie dazu bei der Wurzel, und überlegen Sie sich, welchem Ast Sie jeweils folgen, wenn ein Knoten ...
Formulieren Sie umgangssprachlich eine Vorschrift, die bei einem gegebenen Element das nächste Element nach der Inordnungs-Traversierung zurückgibt. Betrachten Sie dazu wieder die vier oben genannten Fälle, d.h. wenn der gegebene Knoten ...
Belegen Sie die Richtigkeit Ihrer Algorithmen anhand der beiden Beispielbäume.
Lernziele
Betrachten Sie den folgenden Beispielbaum, und begründen Sie die folgenden Aussagen mit Hilfe der Entwurfscodes für die Methoden OErster und ONächster.
OErsterRek(Baum)
'Abbruchbedingung
FALLS Baum leer ist
gib Nothing zurück.
SONST FALLS Baum KEINEN linken Nachfolger hat
gib Baum zurück.
'Reduktion
SONST
gibt ersten Eintrag von linkem Teilbaum von Baum zurück.
ONächster(Knoten)
FALLS Knoten einen rechten Teilbaum hat
gib ersten Eintrag des rechten Teilbaumes zurück.
SONST
beginne bei Knoten
WIEDERHOLE BIS Begriff > Begriff in Knoten
klettere einen Knoten hoch
FALLS neuer Knoten leer ist
gibt Nothing zurück
brich ab.
gib aktuellen Knoten zurück.
Lernziele
Betrachten Sie die beiden Binärbäume.
Erstellen Sie nach dem Breitentraversierungsverfahren je eine Sequenz für die Elemente dieser beiden Bäume. Rekonstruieren Sie anschliessend aus Ihren Sequenzen von Elementen mit Hilfe des Einfügealgorithmus die Bäume, und vergleichen Sie sie mit den Originalen.
Erstellen Sie nach dem Inordnungs-Tiefentraversierungsverfahren je eine Sequenz für die Elemente der beiden Bäume. Beschreiben Sie anschliessend ein Verfahren, das aus diesen Sequenzen wieder gute, d.h. möglichst ausbalancierte Bäume aufbauen kann.
Lernziele
Verwenden Sie für die Aufgaben Papier und Bleistift, und diskutieren Sie Ihre Lösungen mit Ihrem Nachbarn oder Ihrer Nachbarin. Es gibt meist keine eindeutige Antworten.
Vertiefungsfragen
Die Übungsaufgabe "Turtle" implementiert einfache Turtlegrafik-Befehle in einem Standardmodul und stellt sie zur Verfügung. Welche Vorteile hätte man, wenn man anstelle des Standardmoduls ein Klassenmodul verwenden würde?
Sie sollen eine Anwendung entwickeln, welche die Leistungen aller Studierenden einer Fakultät verwaltet. Welche der drei Datenstrukturen wählen Sie für folgende Daten? (Begründen Sie Ihre Antworten.)
|
|
|
Angenommen, Sie sollen ein Zeichenprogramm entwickeln, das einfach zu bedienen ist. Sie kommen zum Schluss, dass es für die Benutzer wohl am einfachsten ist, wenn sie mit ihren gewohnten Werkzeugen wie Papier und Bleistift arbeiten können. Sie entschliessen sich deshalb für einen objektorientierten Ansatz.
Sie identifizieren drei Gruppen von Werkzeugen:
Der folgende Entwurfscode illustriert an einem Beispiel, wie Sie gedenken, mit den Objekten dieser drei Gruppen zu arbeiten.
Nimm oder erstelle roten Bleistift der Dicke 3. Nimm oder erstelle Kreisschablone mit Mittelpunkt 50/60 und Radius 30. Nimm oder erstelle weisses Papier im Format A4 quer. Zeichne auf Papier mit Kreisschablone und Bleistift.
Nennen Sie für jede Werkzeuggruppe reale Gegenstände, von denen Sie abstrahieren können. Nennen Sie weitere Gegenstände, die Sie im Programm abbilden könnten, die aber in keine der drei Gruppen passen.
Nennen Sie Eigenschaften dieser Gegenstände, die Ihr Programm implementieren muss. Nennen Sie Attribute der Gegenstände, die Ihr Programm ignorieren kann.
Nennen Sie die Klassenmodule, die Sie benötigen, um ihre Gegenstände im Programm abzubilden. Aus welchen Klassen kann man die im Entwurfscode verwendeten Objekte erstellen?
Welche Eigenschaften implementieren Sie als öffentliche Variablen, bei welchen verwenden Sie Property-Prozeduren? Skizzieren Sie die Implementation jener Eigenschaften, die im Entwurfscode verwendet werden.
Das Zeichnen sei Aufgabe der Objekte der Gruppe i. Die 'zeichnen'-Methode nimmt je ein Objekt der Gruppen ii und iii entgegen und stellt das gewünschte auf dem Bildschirm dar. Notieren Sie den Prozedurkopf der Methode 'zeichnen' in VBA.
Skizzieren Sie die Implementation des obigen Entwurfcodes in VBA.